package com.tjn.set_;

import java.util.LinkedHashSet;
import java.util.Set;

/**
 * @author 陶镓妮
 * @version 1.0
 */
public class LinkedHashSet_ {
    @SuppressWarnings("all")
    public static void main(String[] args) {

        //LinkedHashSet是HashSet的子类，底层是一个LinkedHashMap，维护了一个数组+双向链表
        //因为是双向链表，所以数据添加顺序和取出顺序一致，不能添加重复的元素

        //在LinkedHashSet中，维护了一个hash表和一个双向链表，有head和tail，每个结点都有before和after属性，得以形成双向链表
        //在添加一个元素的时候，先计算hash值，得到该节点在table中的索引位置，然后添加元素到双向链表，before和after将每个结点连接起来
        //这样取出元素的顺序就和添加的顺序一样

        Set set = new LinkedHashSet();
        set.add(new String("hello"));
        set.add(111);
        set.add(new A(12));
        set.add(222);
        set.add(222);

    }
}
